iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Mobile Development

[Android Studio & Spring boot 30天挑戰]系列 第 14

[Android Studio & Spring boot 30天挑戰] Day14- MQTT(上)

  • 分享至 

  • xImage
  •  

第14天的主題是MQTT(Message Queuing Telemetry Transport)介紹。MQTT是一個輕量級的、簡單的、高效的通訊協議,主要用於物聯網(IoT)應用中,在這裡我使用 Android 套件可以對訂閱的主題發出訊息或接收,接下來就來看看實作吧!!

程式碼

首先我們要到 build.gradle 加入依賴。

dependencies {
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
}

MQTT連線是建立應用程序和MQTT代理之間的通信通道。以下是一個MQTT連線的示例,包括初始化MQTT客戶端、設置連接選項以及實際連接到代理的過程。

public void connect(String brokerUrl, String clientId) {
    try {
        // 設置持久性層
        MemoryPersistence persistence = new MemoryPersistence();

        // 初始化MQTT客戶端
        client = new MqttClient(brokerUrl, clientId, persistence);

        // 設置連接選項
        MqttConnectOptions connectOptions = new MqttConnectOptions();
        connectOptions.setCleanSession(true);

        // 連接到代理
        client.connect(connectOptions);
    } catch (MqttException e) {
        e.printStackTrace();
    }
}

MQTT斷線是終止與MQTT代理之間的連接。這是在應用程序不再需要連接到代理時執行的操作。

public void disconnect() {
    try {
        client.disconnect();
    } catch (MqttException e) {
        e.printStackTrace();
    }
}

MQTT消息推送(發佈)

在MQTT中,消息推送通常稱為“發佈”。發佈是將消息發送到指定的主題。以下是一個發佈消息的示例:

public void publish(String topic, String message) {
    try {
        MqttMessage mqttMessage = new MqttMessage(message.getBytes());
        client.publish(topic, mqttMessage);
    } catch (MqttException e) {
        e.printStackTrace();
    }
}

MQTT消息接收是訂閱特定主題並處理到達消息的過程。以下是一個訂閱主題的示例:

public void subscribe(String topic) {
    try {
        client.subscribe(topic, 0);
    } catch (MqttException e) {
        e.printStackTrace();
    }
}

接下來就是在 Activity 去把 brokerUrl 和 clientId 傳入 MqttHandler 做連線。

public class MainActivity extends AppCompatActivity {

    private MqttHandler mqttHandler;
    private Button buttonOn;
    private Button buttonOff;
    private Button buttonSubscribe;
    private Button buttonUnSubscribe;
    private String brokerUrl = "tcp://broker.emqx.io";
    private String clientId = "mqttx_01fa1dad";
    private EditText publish_editText;
    private EditText subscribe_editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonOn = findViewById(R.id.on_button);
        buttonOff = findViewById(R.id.off_button);
        buttonSubscribe = findViewById(R.id.subscribe_button);
        buttonUnSubscribe = findViewById(R.id.unsubscribe_button);
        publish_editText = findViewById(R.id.publish_editText);
        subscribe_editText = findViewById(R.id.subscribe_editText);

        buttonOn.setOnClickListener(this::publishMessageOn);
        buttonOff.setOnClickListener(this::publishMessageOff);
        buttonSubscribe.setOnClickListener(this::subscribeToTopic);
        buttonUnSubscribe.setOnClickListener(this::unSubscribeToTopic);
         // 做mqtt連線
        mqttHandler = new MqttHandler();
        mqttHandler.connect(brokerUrl, clientId);

    }

今天先講解到 Android 去連線 broker 和使用 MQTTX!!!!


上一篇
[Android Studio & Spring boot 30天挑戰] Day13- Lottie 動畫
下一篇
[Android Studio & Spring boot 30天挑戰] Day15- MQTT(中)
系列文
[Android Studio & Spring boot 30天挑戰]30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言